home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / pasprog.EXE / SPKUTIL.PAS < prev    next >
Pascal/Delphi Source File  |  1995-12-20  |  1KB  |  65 lines

  1. unit spkutil;
  2.  
  3. interface
  4.  
  5.  procedure speaker_on;
  6.  procedure speaker_off;
  7.  procedure speaker_freq(freq:word);
  8. function spk_stat:byte;
  9.  
  10. implementation
  11.  
  12.  procedure speaker_on;
  13.  begin
  14.   asm
  15.            in al,61h
  16.            or al,3
  17.            out 61h,al
  18.   end;
  19.  end;
  20.  
  21.  procedure speaker_off;
  22.  begin
  23.   asm
  24.            in al,61h
  25.            and al,0fch
  26.            out 61h,al
  27.   end;
  28.  end;
  29.  
  30.  procedure speaker_freq(freq:word);
  31.  const
  32.   timer_clock   = 1193180;
  33.  type
  34.   wrd           = record
  35.                   lo    : byte;
  36.                   hi    : byte;
  37.                   end;
  38.  
  39.  var
  40.   count         : word;
  41.  begin
  42.  if freq>18 then count:=round((timer_clock/freq)) else count:=0;
  43.  asm
  44.     pushf
  45.     push ax
  46.     cli
  47.     mov  al,(2 shl 6)+(3 shl 4)+(3 shl 1)+(0 shl 0)
  48.     out  43h,al
  49.     mov  al,wrd(count).lo
  50.     out  42h,al
  51.     mov  al,wrd(count).hi
  52.     out  42h,al
  53.     pop  ax
  54.     popf
  55.  end;
  56. end;
  57.  
  58. function spk_stat:byte;
  59. begin
  60.   port[$43]:=128+64+8;{128+64+32+8;}
  61.   spk_stat:=((port[$42]) and 128) shr 7;
  62. end;
  63.  
  64. end.
  65.